const foo8 = function (arrays) {
  var reg = RegExp(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$%!~.,]).{6,}$/);

  let newarr = [];
  //遍历数组匹配
  arrays.forEach(function (item) {
    //如果匹配成功，输出元素
    if (reg.test(item)) {
      console.log(item + "\t匹配成功");
      newarr.push(item);
    } else {
      console.log(item + "\t匹配不成功");
    }
  });

  console.log(newarr);
};

// 很难评
// 另解：^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@\.#$%^&*? ]).*$
//       (?=.{6,}): 这是一个正向前瞻断言，它确保在当前位置之后的字符串中至少包含6个字符。.{6,} 表示匹配任意字符（除换行符）至少6次，但并不会在匹配过程中消耗任何字符。换句话说，它只是检查字符串的长度是否至少为6个字符，而不会实际匹配这些字符。

// (?=.*\d): 这也是一个正向前瞻断言，它确保在当前位置之后的字符串中至少包含一个数字。.* 匹配任意字符（除换行符）零次或多次，直到碰到一个数字 \d。这样就确保了至少有一个数字存在于字符串中。

// 另解
// function eightTitle(arr) {
//   const lowercaseRegex = /[a-z]/;
//   const uppercaseRegex = /[A-Z]/;
//   const digitRegex = /\d/;
//   const specialCharRegex = /[!@#$%^&*()_+]/;

//   arr.forEach((item) => {
//     const hasLowercase = lowercaseRegex.test(item);
//     const hasUppercase = uppercaseRegex.test(item);
//     const hasDigit = digitRegex.test(item);
//     const hasSpecialChar = specialCharRegex.test(item);

//     if (
//       hasLowercase &&
//       hasUppercase &&
//       hasDigit &&
//       hasSpecialChar &&
//       item.length >= 6
//     ) {
//       console.log(`${item} - 匹配成功`);
//     } else {
//       console.log(`${item} - 不成功`);
//     }
//   });
// }
